

public class Main {
	private static int headerLength = 4;
	private static int rowLength = 2 + 4 + 8 * 11;
	
	public static void main(String[] args) {
		BPlusTree bPlusTree = new BPlusTree();
        
//        bPlusTree.add(2, new Integer("2"));
//        bPlusTree.add(19, new Integer("19"));
//        bPlusTree.add(7, new Integer("7"));
//        bPlusTree.add(10, new Integer("10"));
//        bPlusTree.add(3, new Integer("3"));
//        bPlusTree.add(4, new Integer("4"));
//        bPlusTree.add(5, new Integer("5"));
//        bPlusTree.add(13, new Integer("13"));
//        bPlusTree.add(100, new Integer("100"));
//        bPlusTree.add(50, new Integer("50"));
//        bPlusTree.add(8, new Integer("8"));
//        bPlusTree.add(-16, new Integer("-16"));
//        bPlusTree.add(0, new Integer("0"));

      bPlusTree.add(1, new Integer("1"));
      bPlusTree.add(2, new Integer("2"));
      bPlusTree.add(3, new Integer("3"));
      bPlusTree.add(4, new Integer("4"));
      bPlusTree.add(5, new Integer("5"));
      bPlusTree.add(6, new Integer("6"));
      bPlusTree.add(7, new Integer("7"));
      bPlusTree.add(8, new Integer("8"));
      bPlusTree.add(9, new Integer("9"));
      bPlusTree.add(10, new Integer("10"));
      bPlusTree.add(11, new Integer("11"));
      bPlusTree.add(12, new Integer("12"));
      bPlusTree.add(13, new Integer("13"));
      bPlusTree.add(14, new Integer("14"));
      bPlusTree.add(15, new Integer("15"));
      bPlusTree.add(16, new Integer("16"));
      bPlusTree.add(17, new Integer("17"));
      bPlusTree.add(18, new Integer("18"));
      bPlusTree.add(19, new Integer("19"));
      bPlusTree.add(20, new Integer("20"));
      bPlusTree.add(21, new Integer("21"));
      bPlusTree.add(22, new Integer("22"));
      bPlusTree.add(23, new Integer("23"));
      bPlusTree.add(24, new Integer("24"));
      bPlusTree.add(25, new Integer("25"));
      bPlusTree.add(26, new Integer("26"));
      bPlusTree.add(27, new Integer("27"));
      bPlusTree.add(28, new Integer("28"));
      bPlusTree.add(29, new Integer("29"));
      bPlusTree.add(30, new Integer("30"));

        BinaryFileIO io = new BinaryFileIO("users_ID.index", "user_ID.rsindex", headerLength, rowLength);
        indexLog(io);
	}
	
//	public static void main(String[] args) {
//		BinaryFileIO io = new BinaryFileIO("users_ID.index", "user_ID.rsindex", headerLength, rowLength);
//		io.updateHeader(new byte[]{0,0,0,3});
//		
//		// row length = 90
//		io.insertRow(new byte[]{1,  2,  0,0,0,4, 0,0,0,12,  0,0,0,-1, 0,0,0,13,  0,0,0,0,  0,0,0,0,  1,1,1,4});
//		io.insertRow(new byte[]{0,  1,  0,0,0,3, 0,0,0,21,  0,0,0,1,  0,0,0,0,  0,0,0,0,  0,0,0,0,  0,0,0,0});
//		io.insertRow(new byte[]{1,  3,  0,0,0,3, 0,0,0,21,  0,0,0,2, 0,0,0,45,  0,0,0,5, 0,0,0,71,  0,0,0,0});
//		
//		indexLog(io);
//		int rowNumber = 2;
//		int offset = headerLength + (rowNumber - 1) * rowLength;
//		byte[] row = io.readRow(offset, rowLength);
//		Node n = io.toNode(row, offset);
//		Node node = n.getmChildNode(1);
//		
////		n.setmKey(1025, 0);
////		n.setOffset(0);
////		n.updateNodeInFile();
////		row = io.readRow(offset, rowLength);
//		
////		byte[] n2 = io.toByteArray(n, rowLength);
//
//		
////		io.deleteRow(34);
////		
////		io.insertRow(new byte[]{1,  5,  0,0,0,5, 0,0,0,55,  0,0,0,5, 0,0,0,55,  0,0,0,5, 0,0,0,55,  0,0,0,0});
////		
////		indexLog(io);
////		
////		io.insertRow(new byte[]{1,  2,  0,0,0,2, 0,0,0,22,  0,0,0,2, 0,0,0,22,  0,0,0,2, 0,0,0,22,  0,0,0,0});
////		
////		indexLog(io);
////		
////		io.updateRow(new byte[]{0,  3,  0,0,0,3, 0,0,0,33,  0,0,0,3, 0,0,0,33,  0,0,0,3, 0,0,0,33,  0,0,0,0}, headerLength);
////		
////		indexLog(io);
//	}
	
	public static void indexLog(BinaryFileIO io) {
		for (int i = 0; i < headerLength; i++)
			System.out.print(String.valueOf(io.readRow(0, headerLength)[i]));
		System.out.println();
		byte[] row;
		int offset = headerLength;
		try {
			while (!(row = io.readRow(offset, rowLength)).equals(null)) {
				offset += rowLength;
				for (int i = 0; i < row.length; i++){
					System.out.print(String.valueOf(row[i]) + "  ");
				}
				System.out.println();
			}
		} catch (NullPointerException e) {
			System.out.println("EOF");
		}
	}

}
